package com.softer.chengxin.sysrole.controller;

import com.softer.chengxin.common.domin.Common;
import com.softer.chengxin.common.domin.CommonResult;
import com.softer.chengxin.common.domin.ManagerPageResult;
import com.softer.chengxin.common.domin.Page;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.sysrole.entity.ModuleStreet;
import com.softer.chengxin.sysrole.entity.Role;
import com.softer.chengxin.sysrole.service.SysRoleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 * @author zcz
 * @date 2018/12/20
 */
@RestController
@RequestMapping("/api/sysRole")
@Slf4j
public class SysRoleController {
    @Autowired
    private SysRoleService roleService;

    /**
     * 查询资源树
     *
     * @return 资源
     */
    @RequestMapping("/getModuleStreet")
    public List<ModuleStreet> getRoleStreet(HttpSession session) {
        String loginName = (String) session.getAttribute(Common.LOGIN_NAME);
        if (StringUtils.isBlank(loginName)) {
            return new ArrayList<>();
        }
        // 查询资源树
        List<ModuleStreet> streetList = roleService.getModuleStreet();
        return streetList;
    }

    /**
     * 根据角色id查询角色
     *
     * @return 资源
     */
    @RequestMapping("/getModuleByRoleId")
    public Role getModuleByRoleId(HttpSession session, String roleId) {
        String loginName = (String) session.getAttribute(Common.LOGIN_NAME);
        if (StringUtils.isBlank(loginName)) {
            return null;
        }
        return roleService.getModuleByRoleId(roleId);
    }

    /**
     * 根据角色id查询角色
     *
     * @return 资源
     */
    @RequestMapping("/getList")
    public ManagerPageResult getList(HttpSession session, Page page) {
        String loginName = (String) session.getAttribute(Common.LOGIN_NAME);
        if (StringUtils.isBlank(loginName)) {
            return new ManagerPageResult();
        }
        return roleService.getList(page, loginName);
    }

    /**
     * 新增角色
     *
     * @param session 缓存信息
     * @return 处理结果
     */
    @PostMapping("/add")
    @Transactional(rollbackFor = Exception.class)
    public CommonResult add(HttpSession session, Role role) {
        //登陆名
        String loginName = (String) session.getAttribute(Common.LOGIN_NAME);
        if (StringUtils.isBlank(loginName)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        //登陆类型
        String loginType = (String) session.getAttribute(Common.LOGIN_TYPE);
        if (StringUtils.isBlank(loginType)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        role.setAdder(loginName);
        String roleType = "";
        //0主管部门角色   1企业角色
        switch (loginType) {
            case "0":
                roleType = "0";
                break;
            case "1":
                roleType = "1";
                break;
            default:
        }
        role.setRoleType(roleType);
        //新增角色资源表
        return roleService.add(role);
    }

    /**
     * 编辑角色
     *
     * @param session 缓存信息
     * @return 处理结果
     */
    @PostMapping("/update")
    @Transactional(rollbackFor = Exception.class)
    public CommonResult update(HttpSession session, Role role) {
        //登陆名
        String loginName = (String) session.getAttribute(Common.LOGIN_NAME);
        if (StringUtils.isBlank(loginName)) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "请重新登陆后操作");
        }
        role.setAdder(loginName);
        return roleService.update(role);
    }

    /**
     * 删除角色
     *
     * @param id 角色ID
     * @return 处理结果
     */
    @PostMapping("/delete")
    public CommonResult delete(int id) {
        return roleService.delete(id);
    }

    /**
     * 用户分配角色时查看角色列表
     *
     * @return 角色列表
     */
    @RequestMapping("/getUserRoleList")
    public List<Role> getUserRoleList() {
        return roleService.getUserRoleList();
    }

    /**
     * 查询字典表角色字段，用来填充角色新增下拉框
     *
     * @return 角色列表
     */
    @RequestMapping("/getDicInfoRoleList")
    public List<Role> getDicInfoRoleList() {
        return roleService.getDicInfoRoleList();
    }
}
